import service from '../require/request';
import axios from 'axios';

/**
 * 导入选项接口
 */
export interface ImportOption {
    /**
     * 导入ID
     */
    import_id: string;

    /**
     * 导入描述
     */
    import_desc: string;
}

/**
 * 导入选项列表响应接口
 */
export interface ImportOptionsResponse {
    /**
     * 导入选项列表
     */
    data: ImportOption[];
}

/**
 * 模板下载请求参数接口
 */
export interface TemplateDownloadParams {
    /**
     * 导入ID
     */
    import_id: string;

    /**
     * 导入描述
     */
    import_desc: string;
}

/**
 * 文件导入请求参数接口
 */
export interface FileImportParams {
    /**
     * 用户ID
     */
    uid: string;

    /**
     * 导入ID
     */
    import_id: string;

    /**
     * 导入描述
     */
    import_desc: string;

    /**
     * 文件
     */
    file: File;
}

/**
 * 获取导入选项列表
 * @returns Promise<ImportOption[]> 导入选项列表
 */
export const getImportOptions = async (): Promise<ImportOption[]> => {
    try {
        // 发送请求并等待响应
        const apiData = await service.post<ImportOptionsResponse, ImportOption[]>(
            '/b/sme/cdc/career/import_mgt/options/search',
            {}
        );

        return apiData;
    } catch (error) {
        console.error('获取导入选项列表失败:', error);
        throw error;
    }
};

/**
 * 下载模板文件
 * @param params 模板下载请求参数
 * @returns Promise<void>
 */
export const downloadTemplate = async (params: TemplateDownloadParams): Promise<void> => {
    try {
        // 获取token
        const token = localStorage.getItem('token') || '';

        // 发送请求并等待响应
        const response = await axios({
            method: 'post',
            url: '/b/sme/cdc/career/import_mgt/template/search',
            data: params,
            responseType: 'blob',
            headers: {
                'Content-Type': 'application/json;charset=utf-8',
                Authorization: token ? `Bearer ${token}` : ''
            }
        });

        // 获取文件名
        let filename = `${params.import_desc}模板.xlsx`;
        const contentDisposition = response.headers['content-disposition'];
        if (contentDisposition) {
            const filenameMatch = contentDisposition.match(/filename[^;=\n]*=((['"]).*)\2|[^;\n]*/);
            if (filenameMatch && filenameMatch[1]) {
                filename = filenameMatch[1].replace(/['"]*/g, '');
            }
        }

        // 创建Blob对象
        const blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });

        // 创建下载链接
        const url = window.URL.createObjectURL(blob);
        const link = document.createElement('a');
        link.href = url;
        link.setAttribute('download', filename);
        document.body.appendChild(link);
        link.click();

        // 清理
        window.URL.revokeObjectURL(url);
        document.body.removeChild(link);
    } catch (error) {
        console.error(`下载${params.import_desc}模板失败:`, error);
        throw error;
    }
};

/**
 * 导入文件
 * @param params 文件导入请求参数
 * @returns Promise<any> 导入结果
 */
export const importFile = async (params: FileImportParams): Promise<any> => {
    try {
        const formData = new FormData();
        formData.append('uid', params.uid);
        formData.append('import_id', params.import_id);
        formData.append('import_desc', params.import_desc);
        formData.append('file', params.file);

        const response = await service.post<any, any>(
            '/b/sme/cdc/career/import_mgt/file/upload',
            formData,
            {
                headers: {
                    'Content-Type': 'multipart/form-data'
                }
            }
        );

        return response;
    } catch (error) {
        console.error(`导入${params.import_desc}失败:`, error);
        throw error;
    }
};
